(*
_require local "./src/basis/main/CharVectorSlice.smi"
*)
_require       "./General.smi"
(*
_require local "./src/basis/main/VectorSlice.smi"
_require local "./src/basis/main/Word8VectorSlice.smi"
*)
_use local     "./Slice_common.sml"

structure VectorSlice =
struct
  type 'a slice (= *)
  val length : 'a slice -> int
  val sub : 'a slice * int -> 'a
  val full : 'a vector -> 'a slice
  val slice : 'a vector * int * int option -> 'a slice
  val subslice : 'a slice * int * int option -> 'a slice
  val base : 'a slice -> 'a vector * int * int
  val vector : 'a slice -> 'a vector
  val concat : 'a slice list -> 'a vector
  val isEmpty : 'a slice -> bool
  val getItem : 'a slice -> ('a * 'a slice) option
  val appi : (int * 'a -> unit) -> 'a slice -> unit
  val app : ('a -> unit) -> 'a slice -> unit
  val mapi : (int * 'a -> 'b) -> 'a slice -> 'b vector
  val map : ('a -> 'b) -> 'a slice -> 'b vector
  val foldli : (int * 'a * 'b -> 'b) -> 'b -> 'a slice -> 'b
  val foldri : (int * 'a * 'b -> 'b) -> 'b -> 'a slice -> 'b
  val foldl : ('a * 'b -> 'b) -> 'b -> 'a slice -> 'b
  val foldr : ('a * 'b -> 'b) -> 'b -> 'a slice -> 'b
  val findi : (int * 'a -> bool) -> 'a slice -> (int * 'a) option
  val find : ('a -> bool) -> 'a slice -> 'a option
  val exists : ('a -> bool) -> 'a slice -> bool
  val all : ('a -> bool) -> 'a slice -> bool
  val collate : ('a * 'a -> General.order) -> 'a slice * 'a slice
                -> General.order
end
